// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package strconv

// FormatComplex将复数c转换为
// 形式（a+bi）的字符串，其中a和b是实部和虚部，
// 根据格式fmt和prec进行格式化。
// 
// 格式fmt和precision prec与FormatFloat中的含义相同。
// 假设原始值是从复杂的
// 位大小位的值中获得的，则对结果进行舍入，对于complex64，该值必须为64，对于complex128，该值必须为128。
func FormatComplex(c complex128, fmt byte, prec, bitSize int) string {
	if bitSize != 64 && bitSize != 128 {
		panic("invalid bitSize")
	}
	bitSize >>= 1 // complex64在内部使用float32 

	// 检查虚部是否有符号。如果没有，添加一个。
	im := FormatFloat(imag(c), fmt, prec, bitSize)
	if im[0] != '+' && im[0] != '-' {
		im = "+" + im
	}

	return "(" + FormatFloat(real(c), fmt, prec, bitSize) + im + "i)"
}
